package main

import (
	"flag"
	"fmt"
	"strconv"
)

/*
type Flag struct {
    Name     string // flag在命令行中的名字
    Usage    string // 帮助信息
    Value    Value  // 要设置的值
    DefValue string // 默认值（文本格式），用于使用信息
}
*/
func main() {
	addr := flag.String("addr", "localhost", "this is a IP addr")
	port := flag.Int("port", 80, "this is a network port")
	start := flag.Bool("start", false, "if start")
	flag.Parse()
	fmt.Println(*addr)
	fmt.Println(*port)
	fmt.Println(*start)
	fmt.Println(flag.Args()) //没有定义的参数名，使用-开头的将返回提示错误
	flag.VisitAll(func(f *flag.Flag) {
		if f.Name == "addr" {
			if f.Value.String() != "192.168.1.5" {
				fmt.Println("please input a ipAdrr")
			}
		}
		switch f.Name {
		case "port":
			if x, _ := strconv.Atoi(f.Value.String()); x == 8080 {
				fmt.Println("port OK")
			} else {
				fmt.Println("port error")
			}
		case "start":
			if x, _ := strconv.ParseBool(f.Value.String()); x == true {
				fmt.Println("start true")
			} else {
				fmt.Println("start false")
			}

		}

	})
}
